// load dependencies
require("./code/load")("code/scripts.js", "code/chapter/05_higher_order.js", "code/intro.js");
const _ = require('ramda');
function textScripts(text) {
  let scripts = countBy(text, char => {
    let script = characterScript(char.codePointAt(0));
    return script ? script.name : "none";
  }).filter(({ name }) => name != "none");

  let total = scripts.reduce((n, { count }) => n + count, 0);
  if (total == 0) return "No scripts found";

  return scripts.map(({ name, count }) => {
    return `${Math.round(count * 100 / total)}% ${name}`;
  }).join(", ");
}

console.log(textScripts('英国的狗说"woof", 俄罗斯的狗说"тяв"'));



function dominantDirection(text) {
  // let counted = countBy(text, char => {
  //   // console.log("=====");
  //   // console.log("char");
  //   // console.log(char);
  //   // 遍历了 每一个 char ，可能是每个字符都有不同的 点，utf啥的
  //   // let codeP= char.codePointAt(0);
  //   // console.log("codeP");
  //   // console.log(codeP);
  //   // 根据这个点 就可以查表
  //   let script = characterScript(char.codePointAt(0));
  //   // console.log("script");
  //   // console.log(script);
  //   // 查表查出方向
  //   return script ? script.direction : "none";
  // }).filter(({name}) => name != "none");

  let countedAll = countBy(text, char => {

    let script = characterScript(char.codePointAt(0));

    return script ? script.direction : "none";
  })
  // function filter<any, any>(pred: (value: any) => boolean, collection: any): any (+4 overloads)

  let counted = _.filter(({ name }) => name != "none", countedAll)
  // 查出方向是 none的不要

  // 读出来是0 就默认是"ltr";？
  if (counted.length == 0) return "ltr";
  // 哪个大就是哪个
  // 所有的字符 他还去数出来每个字符是左边的还是右边的 然后统计了
  // 然后少数服从多数
  // reduce 本来是是对列表做的 但是现在就两个 就是取出大的来 
  // 但是这好吗？这不好 不讲武德 不易读，至少本蠢货 没看懂
  // let maxCntOne=  _.max(_.prop('count'),counted)
  // console.log("maxCntOne");
  // console.log(maxCntOne);
  // 不过不知道怎么写 max 啊 
  // function reduce<any, number>(fn: (acc: number, elem: any) => number | _.Reduced<number>, acc: number, list: readonly any[]): number (+2 overloads)

  let maxCntOne = _.reduce((a, b) => {
    return a.count > b.count ? a : b
  }, 0, counted)
  return maxCntOne.name
  // return counted.reduce((a, b) =>{
  //   console.log("a");
  //   console.log(a);
  //   console.log("b");
  //   console.log(b);
  //   return  a.count > b.count ? a : b
  // }).name;
}

// function dominantDirection(text: any): any

function dominantDirection(text) {
  let counted = countBy(text, char => {
    // console.log("=====");
    // console.log("char");
    // console.log(char);
    // 遍历了 每一个 char ，可能是每个字符都有不同的 点，utf啥的
    // let codeP= char.codePointAt(0);
    // console.log("codeP");
    // console.log(codeP);
    // 根据这个点 就可以查表
    let script = characterScript(char.codePointAt(0));
    // console.log("script");
    // console.log(script);
    // 查表查出方向
    return script ? script.direction : "none";
  }).filter(({name}) => name != "none");
// 查出方向是 none的不要

// 读出来是0 就默认是"ltr";？
  if (counted.length == 0) return "ltr";
// 哪个大就是哪个
// 所有的字符 他还去数出来每个字符是左边的还是右边的 然后统计了
// 然后少数服从多数
// reduce 本来是是对列表做的 但是现在就两个 就是取出大的来 
// 但是这好吗？这不好 不讲武德 不易读，至少本蠢货 没看懂
  return counted.reduce((a, b) =>{
    console.log("a");
    console.log(a);
    console.log("b");
    console.log(b);
    return  a.count > b.count ? a : b
  }).name;
}


console.log(dominantDirection("Hello!"));
// → ltr
console.log(dominantDirection("Hey, مساء الخير"));
// → rtl
